package top.infopub.mgr.hr.service;

import java.util.List;

import top.infopub.generic.GenericService;
import top.infopub.mgr.hr.domain.OrgInfoDomain;
import top.infopub.mgr.hr.vo.OrgInfoVo;
import top.infopub.model.hr.OrgInfo;
import top.infopub.model.mkt.PreProject;

import com.github.pagehelper.Page;


public interface OrgInfoService extends GenericService<OrgInfo, String> {

    void saveOrg(OrgInfo orgInfo);

    /**
     * 获取当前公司与其子孙公司
     * @return 
     * @see
     */
    List<OrgInfo> selectVisibleOrgOfSelf(String orgId);

    /**
     * 根据条件查询公司记录
     * @param page
     * @param orgInfoVo
     * @return 
     * @see
     */
    Page<OrgInfoDomain> selectPageByDomainWhere(Page<OrgInfoDomain> page, OrgInfoVo orgInfoVo);

    /**
     * 根据id查询公司详情（包含部门）
     * @param id 公司id
     * @return 
     * @see
     */
    OrgInfoDomain selectById(String id);
    

    /**
     * 根据公司名查询是否存在
     * @param compName 公司名
     * @return 
     * @see
     */
    boolean selectByCompName(String compName);

    /**
     * 根据名称和id查询公司是否存在
     * @param compName 公司名
     * @param id 公司Id
     * @return 
     * @see
     */
    boolean selectByCompNameAndId(String compName, String id);

    /**
     * 根据公司类型查询公司记录
     * @param types 公司类型
     * @return 
     * @see
     */
    List<OrgInfo> selectByTypes(String types);

    /**
     * 根据可见的公司id查询公司记录
     * @param visibleOrgIds 可见公司id
     * @return 
     * @see
     */
    List<OrgInfo> selectByVisibleIds(String visibleOrgIds);

    /**
     * 根据公司id查询关联的项目信息
     * @param id 主键id
     * @return 
     * @see
     */
    PreProject selectProjectById(String id);
    
    /**
     * 根据项目公司关联项目编号查询公司信息
     */
    OrgInfo queryByProjectCode(String proId);

    /**
     * 根据可见的公司id查询公司记录且过滤区域公司
     * @param visibleOrgIds 可见公司id
     * @return 
     * @see
     */
    List<OrgInfo> selectByVisibleIdsAndNotArea(String visibleOrgIds);
    
    /**
     * 根据可见公司id查询公司记录
     * @param visibleOrgIds 可见公司id
     * @return 
     * @see
     */
    List<OrgInfo> selectByVisibleIdsAndProCodeIsnOtNull(String visibleOrgIds);
    
    /**
     * 根据查询项目编号不为空公司记录
     * @return 
     * @see
     */
    List<OrgInfo> selectByProCodeIsnOtNull();
   
}